//
// Created by tacom on 22-9-12.
//

/** Intel TBB各种总结：
 *
 **********************  基础函数 ************************
 *  1. parallel_for(range, gan_size, func)
 *  这里会随机访问，最起码需要保证是数组下标(vector之类的)
 *  void ParallelApplyFoo( float a[], size_t n ) {
 *     parallel_for(blocked_range<size_t>(0,n), ApplyFoo(a));
 *  }
 *
 *  2. parallel_for_each(iter.begin(), iter.end(), func)
 *  这个函数处理长度未知的数据，iter最好是vector类型，否则自动转换为串行
 *  void ParallelApplyFooToList( const std::list<Item>& list ) {
 *     parallel_for_each( list.begin(), list.end(), ApplyFoo() );
 *  }
 *
 *  3. parallel_reduce
 *  此函数需要实现仿函数，整体思路仍然是任务切分，以及统计（归并)，或者fork-join思路
 *  parallel_reduce( blocked_range<size_t>(0,n), sf );
 *
 *  4.parallel_pipeline
 *  应该说是流比较合适，对于流中的数据，定义多个hook(函数里是filter)对经过的数据进行处理
 *
 ************************** TBB提供的并发容器 **********************
 *  1. concurrent_hash_map
 *  和常规的hash_map不同，不能直接进行插入，
 *  需要声明concurrent_hash_map<t>::accessor，这是一个用于并发判断这个元素应该存放的位置
 *
 *  2. concurrent_vector
 *  常见的push_back，实现了并发状态下的安全性
 *  std::copy( string, string+n, vector.grow_by(n) );
 *  grow_by会预先分配n个位置，进行插入，速度会较快
 *
 *  3. Concurrent Queue Classes
 *  提供了常见的阻塞式push和pop
 *  还有try_系列，这个操作将会判断是否有足够的容量进行插入
 *
 */
